/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	qr_scan.c
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-05-24
**	Function List： 
**  History:         
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                             INCLUDE FILES
*********************************************************************************************************
*/
#include "rfid.h"



/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	结构体定义
*********************************************************************************************************
*/

 
/*
*********************************************************************************************************
*                                              	函数原型声明
*********************************************************************************************************
*/
static void modbus_uart_recv_callback(void* arg,uint8_t *rxbuff,uint16_t rxsize);

/*
*********************************************************************************************************
*                                              	全局变量定义
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	模块静态变量定义
*********************************************************************************************************
*/
static rfid_status_t rfid_status = RFID_UNINIT;
static struct MODBUS_T h_modbus;
static uint8_t read_buff[sizeof(rfid_recv_t)] = {0};
static rfid_read_callback pfn_read_callback = NULL;
/*
*********************************************************************************************************
*                                              	函数定义
*********************************************************************************************************
*/

void rfid_init(rfid_read_callback pfn_cb)
{
	if(MODBUS_ERRNONE != modbus_init(&h_modbus,RFID_UART_CHN,RFID_UART_BAUDRATE))
	{
		Critical_Log("RFID modbus init failed!\r\n");
		return;
	}
	pfn_read_callback = pfn_cb;
	h_modbus.pfn_recv_callback = modbus_uart_recv_callback;
	uint16_t channel = RFID_CHANNEL_1_ENABLE;
	modbus_write(&h_modbus,RFID_MODBUS_ADDR,WRITE_SINGLE_REG,RFID_CHANNEL,1,&channel);
	return;
}
void rfid_read(void)
{
	if(rfid_status != RFID_ERR_NONE)
	{
		Trace_Log("RFID catch err!\r\n");
		return;
	}
	modbus_read(&h_modbus,RFID_MODBUS_ADDR,READ_REG,RFID_READ_START,RFID_DATA_WORD_SIZE);
}
static void modbus_uart_recv_callback(void* arg,uint8_t *rxbuff,uint16_t rxsize)
{
	rfid_recv_t* p_recv = (rfid_recv_t*)rxbuff;
	if(RFID_UNINIT != rfid_status && p_recv->fn == READ_REG && rxsize == sizeof(rfid_recv_t))
	{
		Trace_Log("Read RFID 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X;\r\n",
		p_recv->data[0],p_recv->data[1],p_recv->data[2],p_recv->data[3],
		p_recv->data[4],p_recv->data[5],p_recv->data[6],p_recv->data[7]);
		if(pfn_read_callback != NULL)
		{
			pfn_read_callback(p_recv->data,RFID_DATA_BUFF_SIZE);
		}
	}
	else if(RFID_UNINIT == rfid_status && p_recv->fn == WRITE_SINGLE_REG)
	{
		rfid_status = RFID_ERR_NONE;
	}
	if(p_recv->fn == 0x03 || p_recv->fn == 0x06 || p_recv->fn == 0x04
		|| p_recv->fn == 0x10)
	{
		
	}
	else
	{
		rfid_status = RFID_ERR;
		Trace_Log("RFID modbus err!\r\n");
	}
}
